﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack
{
    public class ControlesDomicilio
    {
        public ControlesDomicilio(ComboBox cboProvincias, ComboBox cboLocalidades)
        {
            CboProvincias = cboProvincias;

            if (cboLocalidades != null)
            {
                CboLocalidades = cboLocalidades;
                CboProvincias.SelectedIndexChanged += new EventHandler(CboProvincias_SelectedIndexChanged);
                CargarLocalidades();
            }

            CargarProvincias();
        }

        public ControlesDomicilio(ComboBox cboProvincias) : this(cboProvincias, null) { }

        public ComboBox CboProvincias { get; set; }
        public ComboBox CboLocalidades { get; set; }

        public int IdProvinciaSeleccionada 
        {
            get 
            {
                if (CboProvincias.SelectedIndex > 0)
                    return (int)(Provincias)Enum.Parse(typeof(Provincias), CboProvincias.SelectedItem.ToString().Replace(" ", "_"));
                else
                    throw new Exception("No se ha seleccionado ninguna provincia");
            }
        }

        public int IdLocalidadSeleccionada
        {
            get
            {
                if (CboLocalidades.SelectedIndex > 0)
                    return ((Localidad)CboLocalidades.SelectedItem).IdLocalidad;
                else
                    throw new Exception("No se ha selecionado ninguna localidad");
            }
        }

        public void CargarLocalidades()
        {
            BLLLocalidad bllLocalidad = new BLLLocalidad();

            CboLocalidades.Items.Clear();
            CboLocalidades.Items.Add("-- Seleccione Localidad --");

            if (CboProvincias.SelectedIndex < 1)
                foreach (Localidad locActual in bllLocalidad.TraerLocalidades().OrderBy(l => l.Nombre))
                    CboLocalidades.Items.Add(locActual);
            else
            {
                Provincias p = (Provincias)Enum.Parse(typeof(Provincias), CboProvincias.SelectedItem.ToString().Replace(" ", "_"));

                foreach (Localidad locActual in bllLocalidad.TraerLocalidades(p).OrderBy(l => l.Nombre))
                    CboLocalidades.Items.Add(locActual);
            }

            CboLocalidades.SelectedIndex = 0;
        }

        public void CargarProvincias()
        {
            CboProvincias.Items.Clear();
            CboProvincias.Items.Add("-- Seleccione Provincia --");

            foreach (string prov in Enum.GetNames(typeof(Provincias)))
                CboProvincias.Items.Add(prov.Replace("_", " "));

            CboProvincias.SelectedIndex = 0;
        }

        private void CboProvincias_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboProvincias.SelectedIndex != 0)
            {
                Localidad localidadSeleccionada = CboLocalidades.SelectedItem as Localidad;

                CargarLocalidades();

                if (localidadSeleccionada != null && ((Provincias)localidadSeleccionada.Provincia).ToString().Equals(CboProvincias.SelectedItem.ToString().Replace(" ", "_")))
                    for (int i = 0; i < CboLocalidades.Items.Count; i++)
                    {
                        Localidad localidadActual = CboLocalidades.Items[i] as Localidad;

                        if (localidadActual != null && localidadActual.IdLocalidad == localidadSeleccionada.IdLocalidad)
                        {
                            CboLocalidades.SelectedIndex = i;
                            break;
                        }
                    }
            }
            else
                CargarLocalidades();
        }
    }
}
